<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 1. 定义一个根标签,未来将利用react动态创建的元素插入到这个根标签中,从而渲染到页面上 -->
    <div id="root"></div>

    <!-- 2. 引入react.js和react-dom.js-->
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <!-- 引入babel是为了让babel帮我们编译jsx -->
    <script src="./js/babel.js"></script>

    <!-- 3. 根据需求,先创建虚拟dom -->
    <!-- 加了type属性,则表示这个script标签的代码需要被babel编译 -->
    <script type="text/babel">
      let arr = [
        { name: 'hj', age: 38, info: 'lsp' },
        { name: 'lt', age: 58, info: 'lsp2' },
        { name: 'ww', age: 88, info: 'lsp3' },
      ]
      // 注意: 由于react可以将数组中的每一个元素当做一个子节点渲染出来.所以列表渲染一般都是根据数据数组,得到一个存放了虚拟dom的数组,然后直接渲染存放虚拟dom数组即可
      let lis = arr.map((item, index) => {
        return (
          // 注意: 列表渲染的时候,为了提高react底层执行效率,要求我们给列表渲染的jsx最外面的标签上加一个key属性,可以的值在当前列表渲染的父元素范围内部不重复即可
          <li key={index}>
            <h1>{item.name}</h1>
            <p>{item.age}</p>
            <i>{item.info}</i>
          </li>
        )
      })

      const element = (
        <div>
          <ul>{lis}</ul>
        </div>
      )

      //   4. 根据第三步已经创建出来的虚拟dom,生成真实dom,并插入到root中最终渲染到页面上
      ReactDOM.createRoot(document.getElementById('root')).render(element)
    </script>
  </body>
</html>
